/**
 * @addtogroup gbc_msg_17691
 * gbc_17691_msg_gb
 * @brief        标准国六消息
 * @par 示例
 * @code
   // 国六标准协议的消息,每个消息类都实现了各自消息的编码事件
   // 编码后的数据不含标识(0x23 0x23)和校验码，这2项内容在父类TGbc17691MsgEncode中添加
   // 国六时间格式都为byte形式，不是常见的bcd格式，如2020-09-11 11:11:20 时间数据为:{0x14,0x09,0x0b,0x0b,0x0b,0x14}

   // 以使用登入消息为例，其他类似
   TGbc17691MsgLogin msg_login;     ///< 登入消息
   Int8 buf[64];                    ///< 编码后存放数据的缓冲
   Int32 enc_len = 0;               ///< 编码后的长度
   TMfSystemTime st;                ///< mfc时间对象
   TGbc17691Mgr mgr;                ///< 管理器对象

   //创建管理器
   TGbc17691MgrCreate(&mgr, kGbc17691ProtocolSd, 1, kGbc17691ETypeNotEncrypt);
   ...

   TGbc17691MsgLoginCreate(&msg_login);///< 创建登录消息
   // 以下为登入消息属性赋值
   MfGetLocalTime(&st);
   TransMfTimeToByte(&st, msg_login.collect_time, sizeof(msg_login.collect_time)); ///<设置登录时间 
   strcpy(msg_login.iccid, "89860117795950212874"); ///< 设置ICCID
   msg_login.login_seq = TGbc17691MgrLoginSeqId(mgr, kGbc17691LoginType);   ///< 设置流水号

   // 消息编码
   enc_len = TGbc17691MsgEncode((TGbc17691Msg *)&msg_login, mgr, buf, sizeof(buf));
   ...
   OfDestroyObject((TOfObject *)&msg_login);
   TGbc17691MgrDestroy(&mgr);

 * @endcode
 * @{
 */
/**
 * @file         gbc_17691_msg_gb.h
 * @brief        标准国六消息
 * @note         该头文件只针对国标17691的消息
 * @author       Dengdeshou
 * @date         2020-08-07
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2020-08-07  <td>1.0                   <td>Dengdeshou      <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _SCC_PT17691_MSG_GB_H_
#define _SCC_PT17691_MSG_GB_H_

#include "ofc/ofc_object.h"
#include "ofc/ofc_list.h"
#include "mfc/mfc_string.h"
#include "gbmsg17691/gbc_17691_msg.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 使用国六消息
 
 */

/**
 * 登入(cmd = 0x01)
 ********************************************************************************************
 */
typedef struct TGbc17691MsgLoginTag TGbc17691MsgLogin;
struct TGbc17691MsgLoginTag
{
PROTECTED
    TGbc17691Msg parent_;                ///< 基类  
    TOfVirtualMethod Destroy_;          ///< 析构事件

PUBLIC
    UInt8 collect_time[6];              ///< 数据采集时间            
    UInt16 login_seq;                   ///< 登入流水号，从1开始, 循环累加，最大65531,以天为单位
    Int8 iccid[32];                     ///< SIM卡的ICCID号码
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return
 */
void TGbc17691MsgLoginCreate(TGbc17691MsgLogin *self);

/**
 * 上报类型
 */
enum TGbc17691UploadTypeEnumTag
{
    kPt17691UploadTypeReal = 2,        ///< 实时信息
    kPt17691UploadTypeReissue = 3,     ///< 补发信息
};
typedef enum TGbc17691UploadTypeEnumTag TGbc17691UploadTypeEnum;

/**
 * 信息流(cmd = 0x02, 0x03)
 ***************************************************************************************
 */
typedef struct TGbc17691MsgStreamTag TGbc17691MsgStream;
struct TGbc17691MsgStreamTag
{
PROTECTED
    TGbc17691Msg parent_;                ///< 基类  
    TOfVirtualMethod Destroy_;          ///< 析构事件

PUBLIC
    UInt8 upload_type;                  ///< 上报类型，实时或补传，参考TGbc17691UploadTypeEnum
    UInt8 collect_time[6];              ///< 数据采集时间   
    UInt16 msg_seq;                     ///< 消息流水号
    UInt8 msg_count;                    ///< 信息流个数
    TGbc17691MsgStreamItem *stream_item;///< 具体信息项
    TGbc17691Signature signature;
    UInt8 enc_buf[160];
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return
 */
void TGbc17691MsgStreamCreate(TGbc17691MsgStream *self, UInt8 upload_type);

/**
 * 登出(cmd = 0x04)
 *************************************************************************************
 */
typedef struct TGbc17691MsgLogoutTag TGbc17691MsgLogout;
struct TGbc17691MsgLogoutTag
{
PROTECTED
    TGbc17691Msg parent_;                ///< 基类  
    TOfVirtualMethod Destroy_;          ///< 析构事件

PUBLIC
    UInt8 collect_time[6];              ///< 数据采集时间            
    UInt16 login_seq;                   ///< 对应的登录流水号
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return
 */
void TGbc17691MsgLogoutCreate(TGbc17691MsgLogout *self);

/**
 * 校时(cmd = 0x05)
 *****************************************************************************************
 */
typedef struct TGbc17691MsgCheckTimeTag TGbc17691MsgCheckTime;
struct TGbc17691MsgCheckTimeTag
{
PROTECTED
    TGbc17691Msg parent_;                ///< 基类  
    TOfVirtualMethod Destroy_;           ///< 析构事件
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return
 */
void TGbc17691MsgCheckTimeCreate(TGbc17691MsgCheckTime *self);

#ifdef __cplusplus
}
#endif

#endif

/**
 * @} 
 */
